你想要发明一个编程语言,你希望它是:
你想要发明一个编程语言,你希望它是:
□ 函数式 □ 声明式 □ 面向对象 □ 面向过程 □ 栈式编程 □ 多范式
○ 惰性求值 ○ 及早求值
○ 静态类型 ○ 动态类型
○ 函数求值无副作用 ○ 函数结果可能受外界影响
□ 不健康的宏扩展 □ 可视化编程
○ 初学者易上手 ○ 对非程序员友好 ○ 难用到无法理解
你倾向于认为:
□ 编程语言难在语法学习上
□ 不需要程序员来考虑垃圾回收
□ 电脑内存是无限大的
□ 你认为没人需要:
□ 并发 □ REPL □ 调试器 □ IDE □ I/O
□ 用其他语言与你的语言相互调用
□ 世界上大家都只用 ASCII
□ 开发成大型项目很轻松
□ 程序员学一门编程语言很简单啊
□ 程序员学一个专用的 IDE 很简单啊
□ 程序员乐意写一堆脚手架文件
□ 把一些行为设置成 ”未定义行为“ 可以让程序员不去依赖它们
□ "远距离的鬼魅行为"(这是一个物理学概念:https://arxiv.org/abs/1303.0614)让编程更有乐趣
不幸的是,你的语言缺少:
□ 容易理解的语法 □ 分号 □ 有意义的空白符 □ 宏 □ 隐式类型转换 □ goto
□ 异常 □ 闭包 □ 尾递归 □ 协程 □ 反射 □ 分型 □ 多继承
□ 操作符重载 □ 代数类型 □ 递归类型 □ 多态 □ 协变数组类型
□ monads □ 依赖类型 □ 中缀操作符 □ 嵌套注释 □ 跨行字符串
□ 正则 □ 传值调用 □ 传名调用 □ 传引用调用 □ call/cc
你在你的编程语言中引入了自己的编程哲学:
□ 程序员不需要理解范畴论就可以写“hello world”
□ 程序员写完“hello world”后不会因此患上肌肉过劳损
□ 具有重大意义的程序是用它实现了自己的编译器
□ 具有重大意义的程序不仅仅是用它实现了自己的编译器
□ 没有语言规范
□ 语言规范就是本身的实现
□ 本身的实现是闭源的
□ 实现是用专利保护的
□ 不是由你实现的
□ 类型系统是不完备的
□ 你的语言解释时具有二义性
□ 解释执行的语言永远无法在速度上超越 C
□ 编译后的程序永远没有“可扩展性“
□ 一个能够理解英语的编译器是”AI完备的“
□ 你的语言依赖的优化方法是不可能实现的
□ 世界上只有不到 100 个人足够聪明到能够使用你的语言
□ 你的语言实现中:
□ ____
需要指数时间复杂度
□ ____
是无法预料的
你的实现实际上有漏洞,因为:
□ CPU不是按你想象中的那样运行的
□ 内存不是按你想象中的那样运行的
□ 虚拟机不是按你想象中的那样运行的
□ 编译器”不是“按你想象中的那样运行的
□ 编译器”不能“按你想象中的那样运行
□ 你用掷骰子的方法解决了 shift-reduce 冲突
□ 你需要在你的 runtime 加入编译器
□ 你需要在编译时启动 runtime
□ 你的编译器报错让人无法理解
□ 危险操作只作为 warning
□ 你只需要滑稽地瞪一眼编译器就会崩溃
□ 你只需要滑稽地瞪一眼虚拟机就会崩溃
□ 你似乎不需要理解基本的优化技术
□ 你似乎不需要理解基本的系统编程
□ 你似乎不需要理解指针
□ 你似乎不需要理解函数
额外地,根据市场反馈,你会发现以下问题:
□ 你的语言无法满足生产力的提高
□ 你的语言无法满足易用性
□ 你公然地在你的跑分上作弊:
□ 使用图形计算、模拟器、加密算法的跑分时,只是在用你手写的汇编操作中强行调用了外部函数接口而已。
□ 进行字符串操作时,你不过是在调用 PCRE 而已。
□ 进行矩阵数学计算时,你不过是在调用 BLAS 而已。
□ 并且没人认为你的实现能快过:
□ 汇编 □ C □ Fortran □ Java □ Ruby □ Prolog
□ 你竟然毫无理由地拒绝正统的编程语言理论
□ 你竟然毫无理由地拒绝系统编程
□ 你竟然毫无理由地拒绝算法理论
□ 你竟然无理由地拒绝计算机科学理论
审视一下你的编程语言生态,你表示:
○ 你的复杂的示例代码可以写成一行,这一行是:_________
○ 我们已经有了一个不安全的声明式编程语言
○ 我们已经有了一个安全的命令式面向对象语言
○ 我们已经有了一个安全的静态及早求值函数式语言
○ 你重新发明了 Lisp 但是效果糟糕
○ 你重新发明了 Javascript 但是效果糟糕
○ 你重新发明了 Java 但是效果糟糕
○ 你重新发明了 C++ 但是效果糟糕
○ 你重新发明了 PHP 但是效果糟糕
○ 你重新发明了 PHP 而且效果拔群,但是你拿不出理由来
○ 你重新发明了 Brainfuck 但是一点都不好玩
总之,我认为你:
○ 你有一些新奇的想法,但是并不能实现
○ 这是一个垃圾语言,你应当为发明它而羞愧
○ 当你使用你的进行编程时,是对你发明它的一种惩罚
本文由 @江小傑 翻译,原文链接:http://colinm.org/language_checklist.html。